home *** CD-ROM | disk | FTP | other *** search
/ Euroscene 2 / Euroscene 2.iso / USEFUL / DeliTracker130 / Developer / Developer.run / Examples / PROMIZER.s < prev    next >
Encoding:
Text File  |  1992-09-23  |  24.8 KB  |  1,299 lines

  1.  
  2.     incdir    "Includes:"
  3.     include "misc/DeliPlayer.i"
  4.  
  5. ;
  6. ;
  7.     SECTION Player,Code
  8. ;
  9. ;
  10.  
  11.     PLAYERHEADER PlayerTagArray
  12.  
  13.     dc.b '$VER: PROMIZER 0.1a player module V0.2 (14 Aug 92)',0
  14.     even
  15.  
  16. PlayerTagArray
  17.     dc.l    DTP_PlayerVersion,0
  18.     dc.l    DTP_PlayerName,PName
  19.     dc.l    DTP_Creator,CName
  20.     dc.l    DTP_Check2,Chk
  21.     dc.l    DTP_Interrupt,Int
  22.     dc.l    DTP_InitPlayer,InitPlay
  23.     dc.l    DTP_EndPlayer,EndPlay
  24.     dc.l    DTP_InitSound,InitSnd
  25.     dc.l    DTP_Volume,SetVol
  26.     dc.l    TAG_DONE
  27.  
  28. *-----------------------------------------------------------------------*
  29. ;
  30. ; Player/Creatorname und lokale Daten
  31.  
  32. PName    dc.b 'PROMIZER',0
  33. CName    dc.b 'Frank Hülsmann,',10
  34.     dc.b 'Testversion by Delirium',0
  35.     even
  36.  
  37. *-----------------------------------------------------------------------*
  38. ;
  39. ; Testet, ob es sich um ein PROMIZER-Modul handelt
  40.  
  41. Chk
  42.     move.l    dtg_ChkData(a5),a0        ; ptr to module
  43.  
  44.     moveq    #-1,d0                ; Modul nicht erkannt (default)
  45.  
  46.     move.l    762(a0),d3            ; get patternlenght
  47.     beq.s    ChkEnd
  48.     addi.l    #762,d3                ; add pattern offset
  49.  
  50.     moveq    #31-1,d2            ; #instr
  51. ChkSamp
  52.     moveq    #0,d1
  53.     move.w    (a0),d1                ; samplelength in words
  54.     add.l    d1,d1                ; samplelength in bytes
  55.     add.l    d1,d3                ; add length of sample
  56.     addq.l    #8,a0                ; next sample info
  57.     dbf    d2,ChkSamp
  58.  
  59.     sub.l    dtg_ChkSize(a5),d3        ; test size of module
  60.     cmpi.l    #-64,d3                ; - 64 Bytes
  61.     blt.s    ChkEnd                ; too small
  62.     cmpi.l    #+64,d3                ; + 64 Bytes
  63.     bgt.s    ChkEnd                ; too big
  64.  
  65.     moveq    #0,d0                ; Modul erkannt
  66. ChkEnd
  67.     rts
  68.  
  69. *-----------------------------------------------------------------------*
  70. ;
  71. ;Interrupt für Replay
  72.  
  73. Int
  74.     movem.l    d0-d7/a0-a6,-(sp)
  75.     bsr    mt_music            ; DudelDiDum
  76.     movem.l    (sp)+,d0-d7/a0-a6
  77.     rts
  78.  
  79. *-----------------------------------------------------------------------*
  80. ;
  81. ; Init Player
  82.  
  83. InitPlay
  84.     moveq    #0,d0
  85.     move.l    dtg_GetListData(a5),a0        ; Function
  86.     jsr    (a0)
  87.     move.l    a0,mt_dataptr
  88.  
  89.     move.l    dtg_AudioAlloc(a5),a0        ; Function
  90.     jsr    (a0)                ; returncode is already set !
  91.     rts
  92.  
  93. *-----------------------------------------------------------------------*
  94. ;
  95. ; End Player
  96.  
  97. EndPlay
  98.     move.l    dtg_AudioFree(a5),a0        ; Function
  99.     jsr    (a0)
  100.     rts
  101.  
  102. *-----------------------------------------------------------------------*
  103. ;
  104. ; Init Sound
  105.  
  106. InitSnd
  107.     bsr    mt_init
  108.     rts
  109.  
  110. *-----------------------------------------------------------------------*
  111. ;
  112. ; End Sound
  113.  
  114. EndSnd
  115.     bsr    mt_end
  116.     rts
  117.  
  118. *-----------------------------------------------------------------------*
  119. ;
  120. ; Set new volume
  121.  
  122. SetVol
  123.     move.w    dtg_SndVol(a5),d0
  124.     move.b    d0,mt_maxvol
  125.     rts
  126.  
  127. *-----------------------------------------------------------------------*
  128. ;
  129. ; Promizer - Replay
  130.  
  131. ;------------------------------------------------------------------------------
  132. ;                      PROMIZER PLAYER V0.1a ... MAY 1992
  133. ;------------------------------------------------------------------------------
  134. ;                           coded by MC68000 of TECH
  135. ;                                Frank Hülsmann
  136. ;                             Timmerscheidtstr. 14
  137. ;                             4400 Münster/Germany
  138. ;------------------------------------------------------------------------------
  139. ;
  140. ; MODIFY 'mt_maxvol' (0-64 ... size : byte) TO SET MAXIMUM ABSOLUT VOLUME !!!
  141. ;
  142. ; THIS PLAYER WORKS WITH FINETUNED SAMPLES BY USING A MINIMUM OF RASTER TIME !!
  143. ; THE CODE BASED ON THE PROTRACKER V1.1b REPLAYER BY ZAP/AMIGA FREELANCERS, BUT
  144. ; IT'S MAX.400% FASTER AND FULLY PC-RELOCATIBLE ...
  145. ;
  146. ;------------------------------------------------------------------------------
  147.  
  148. mt_level6=0            ;1=level 6 interupt on (faster dmareg. init)
  149. mt_dmawaiter=4            ;no.of rasterlines waiting for dma
  150.  
  151. ; INIT_PLAYING ----------------------------------------------------------------
  152.  
  153. mt_init    movem.l    d0-a6,-(a7)
  154.     lea    mt_pm(pc),a5
  155.     move.l    mt_dataptr(pc),a0
  156.  
  157.     lea    762(a0),a1            ;patternlenght
  158.     move.l    (a1)+,d0
  159.     add.l    d0,a1                ;samplestarts
  160.             
  161.     lea    mt_samplestarts(pc),a2
  162.     moveq    #30,d1
  163. mt_samploop
  164.     moveq    #0,d0
  165.     move.w    (a0),d0                ;samplelength in words
  166.     add.l    d0,d0                ;samplelength in bytes
  167.     move.l    a1,(a2)+            ;save sample adress
  168.     add.l    d0,a1                ;next sample
  169.     addq.l    #8,a0                ;next sample info
  170.     dbf    d1,mt_samploop
  171.  
  172. ;    or.b    #2,$bfe001            ;filter off
  173.     move.b    #6,mt_speed-mt_pm(a5)
  174.     clr.b    mt_counter-mt_pm(a5)
  175.     clr.w    mt_songpos-mt_pm(a5)
  176.     clr.w    mt_patternpos-mt_pm(a5)
  177.     ifne mt_level6
  178.     move.l    $78.w,mt_oldirq-mt_pm(a5)    ;save old_irq
  179.     endc
  180.     lea    $dff096,a0
  181.     clr.w    $a8-$96(a0)
  182.     clr.w    $b8-$96(a0)
  183.     clr.w    $c8-$96(a0)
  184.     clr.w    $d8-$96(a0)            ;volume voice 1-4 = 0
  185.     moveq    #$f,d0
  186.     move.w    d0,(a0)                ;no sound_dma
  187.  
  188. ; CREATE PERIOD MULTAB (FOR FASTER FINE_TUNING)
  189.  
  190.     moveq    #15,d7
  191.     moveq    #0,d0
  192.     moveq    #72,d1
  193. mt_mulloop2
  194.     move.w    d0,(a5)+
  195.     add.w    d1,d0
  196.     dbf    d7,mt_mulloop2
  197.  
  198. ; CALCULATE RELATIVE JUMP ADRESSES IN JUMPTABS (FOR PC-COMPATIBLE CODE !!!)
  199. ;
  200. ;    lea    mt_init(pc),a0
  201. ;    move.l    a0,d0
  202. ;    lea    mt_jumptab1(pc),a0
  203. ;    lea    mt_jumptab2(pc),a1
  204. ;    lea    mt_jumptab3(pc),a2
  205. ;    lea    mt_jumptab4(pc),a3
  206. ;    moveq    #15,d1
  207. ;mt_jumpcalcloop
  208. ;    add.l    d0,(a0)+
  209. ;    add.l    d0,(a1)+
  210. ;    add.l    d0,(a2)+
  211. ;    add.l    d0,(a3)+
  212. ;    dbf    d1,mt_jumpcalcloop
  213.  
  214.     ifne mt_level6
  215.     lea    mt_irqpointer(pc),a0
  216.     add.l    d0,(a0)
  217.     endc
  218.     
  219.     movem.l    (a7)+,d0-a6
  220.     rts
  221.  
  222. ; END_PLAYING -----------------------------------------------------------------
  223.  
  224. mt_end    movem.l    d0/a0,-(a7)
  225.     ifne mt_level6
  226.     move.l    mt_oldirq(pc),$78.w
  227.     endc
  228.     lea    $dff096,a0
  229.     clr.w    $a8-$96(a0)
  230.     clr.w    $b8-$96(a0)
  231.     clr.w    $c8-$96(a0)
  232.     clr.w    $d8-$96(a0)
  233.     moveq    #$f,d0
  234.     move.w    d0,(a0)
  235.     movem.l    (a7)+,d0/a0
  236.     rts
  237.  
  238. ; SOUND_PLAYER ---------------------------------------------------------------
  239.  
  240. ; kills d0-d7/a0-a6 !!!!
  241.  
  242. mt_music
  243.     moveq    #$f,d5                ;ander com_low
  244.     moveq    #-16,d6                ;ander com    
  245.     lea    mt_pm(pc),a2
  246.  
  247.     addq.b    #1,mt_counter-mt_pm(a2)
  248.     move.b    mt_counter-mt_pm(a2),d0
  249.     cmp.b    mt_speed-mt_pm(a2),d0
  250.     blo.b    mt_nonewallchannels
  251.     clr.b    mt_counter-mt_pm(a2)
  252.     tst.b    mt_pattdeltime2-mt_pm(a2)
  253.     beq.b    mt_getnewnote
  254.     bsr.b    mt_nonewallchannels
  255.     bra.w    mt_dskip
  256.  
  257. mt_nonewallchannels
  258.     lea    $dff0a0,a5
  259.     lea    mt_chan1temp(pc),a6
  260.     bsr.w    mt_checkefx
  261.     lea    $10(a5),a5
  262.     lea    48(a6),a6
  263.     bsr.w    mt_checkefx
  264.     lea    $10(a5),a5
  265.     lea    48(a6),a6
  266.     bsr.w    mt_checkefx
  267.     lea    $10(a5),a5
  268.     lea    48(a6),a6
  269.     bsr.w    mt_checkefx
  270.     bra.w    mt_nonewposyet
  271.  
  272. mt_getnewnote
  273.     move.l    mt_dataptr(pc),a0
  274.     move.l    a0,a3                ;sample infos
  275.     lea    250(a0),a4            ;patterpositions
  276.     lea    766(a0),a0            ;patterndata
  277.     moveq    #0,d1
  278.     move.w    mt_songpos(pc),d0
  279.     move.l    (a4,d0.w),d1
  280.     add.w    mt_patternpos(pc),d1
  281.  
  282.     clr.w    mt_dmacontemp-mt_pm(a2)
  283.  
  284.     lea    $dff0a0,a5
  285.     lea    mt_chan1temp(pc),a6
  286.     bsr.b    mt_playvoice
  287.     lea    $10(a5),a5
  288.     lea    48(a6),a6
  289.     bsr.b    mt_playvoice
  290.     lea    $10(a5),a5
  291.     lea    48(a6),a6
  292.     bsr.b    mt_playvoice
  293.     lea    $10(a5),a5
  294.     lea    48(a6),a6
  295.     bsr.b    mt_playvoice
  296.     bra.w    mt_setdma
  297.  
  298. mt_playvoice
  299.     tst.l    (a6)
  300.     bne.b    mt_plvskip
  301.     bsr.w    mt_pernop
  302. mt_plvskip
  303.     move.l    (a0,d1.l),d2
  304.     eor.l    d6,d2
  305.     move.l    d2,(a6)
  306.     addq.l    #4,d1
  307.     moveq    #0,d2
  308.     move.l    d2,d3
  309.     move.b    2(a6),d2
  310.     lsr.b    #4,d2
  311.     move.b    (a6),d0
  312.     and.b    d6,d0
  313.     or.b    d0,d2
  314.     beq.w    mt_setregs
  315.     lea    mt_samplestarts(pc),a1
  316.     subq.w    #1,d2
  317.     lsl.w    #2,d2
  318.     move.w    d2,d4
  319.     add.w    d4,d4    
  320.     move.w    (a3,d4.w),8(a6)
  321.     move.w    (a3,d4.w),40(a6)        ;sample lenght in words
  322.     move.l    (a1,d2.w),4(a6)            ;sample adress
  323.  
  324.     moveq    #0,d0
  325.     move.b    2(a3,d4.w),d0
  326.     move.b    d0,18(a6)            ;set finetune number
  327.     add.w    d0,d0
  328.     move.w    (a2,d0.w),d0
  329.     lea    mt_periodtable(pc),a4
  330.     add.l    d0,a4
  331.     move.l    a4,44(a6)            ;save periodtable
  332.  
  333.  
  334.     move.b    3(a3,d4.w),d0            ;sample volume
  335.     cmp.b    mt_maxvol(pc),d0
  336.     bls.b    mt_nv
  337.     move.b    mt_maxvol(pc),d0        ;cut volume -> no relative
  338. mt_nv                        ;calculation here ...
  339.     move.b    d0,19(a6)
  340.  
  341.     move.w    4(a3,d4.w),d3             ;get repeat
  342.     beq.b    mt_noloop
  343.     move.l    4(a6),d2            ;get start
  344.     add.w    d3,d3
  345.     add.l    d3,d2                ;add repeat
  346.     move.l    d2,10(a6)
  347.     move.l    d2,36(a6)
  348.     move.w    4(a3,d4.w),d0            ;get repeat
  349.     add.w    6(a3,d4.w),d0            ;add replen
  350.     move.w    d0,8(a6)
  351.     move.w    6(a3,d4.w),14(a6)        ;save replen
  352.     move.b    19(a6),9(a5)            ;init volume
  353.     bra.b    mt_setregs
  354. mt_noloop
  355.     move.l    4(a6),d2
  356.     add.l    d3,d2
  357.     move.l    d2,10(a6)
  358.     move.l    d2,36(a6)
  359.     move.w    6(a3,d4.w),14(a6)        ;save replen
  360.     move.b    19(a6),9(a5)
  361. mt_setregs
  362.     move.w    (a6),d0
  363.     and.w    #$0fff,d0
  364.     beq.w    mt_checkmoreefx            ;if no note
  365.     move.w    2(a6),d0
  366.     and.w    #$0ff0,d0
  367.     cmp.w    #$0e50,d0
  368.     beq.b    mt_dosetfinetune
  369.     moveq    #0,d0
  370.     move.b    2(a6),d0
  371.     and.b    d5,d0
  372.     lsl.b    #2,d0
  373.     move.l    mt_jumptab3(pc,d0.w),a4
  374.     jmp    (a4)
  375.  
  376. mt_jumptab3    
  377.     dc.l    mt_setperiod
  378.     dc.l    mt_setperiod
  379.     dc.l    mt_setperiod
  380.     dc.l    mt_chktoneporta
  381.     dc.l    mt_setperiod
  382.     dc.l    mt_chktoneporta
  383.     dc.l    mt_setperiod
  384.     dc.l    mt_setperiod
  385.     dc.l    mt_setperiod
  386.     dc.l    mt_moreplusperiod
  387.     dc.l    mt_setperiod
  388.     dc.l    mt_setperiod
  389.     dc.l    mt_setperiod
  390.     dc.l    mt_setperiod
  391.     dc.l    mt_setperiod
  392.     dc.l    mt_setperiod
  393.     dc.l    mt_setperiod    ; ???
  394.  
  395. mt_moreplusperiod
  396.     bsr.w    mt_checkmoreefx
  397.     bra.b    mt_setperiod
  398.  
  399. mt_dosetfinetune
  400.     bsr.w    mt_setfinetune
  401.     bra.b    mt_setperiod
  402.  
  403. mt_chktoneporta
  404.     bsr.w    mt_settoneporta
  405.     bra.w    mt_checkmoreefx
  406.  
  407. mt_setperiod
  408.     move.w    (a6),d2
  409.     and.w    #$0fff,d2        ; period 'ausanden'
  410.     move.w    d2,16(a6)        ; set normal period
  411.     move.w    2(a6),d0
  412.     and.w    #$0ff0,d0
  413.     cmp.w    #$0ed0,d0         ; notedelay
  414.     beq.w    mt_checkmoreefx
  415.  
  416.     move.w    20(a6),$dff096
  417.     btst    #2,30(a6)
  418.     bne.b    mt_vibnoc
  419.     clr.b    27(a6)
  420. mt_vibnoc
  421.     btst    #6,30(a6)
  422.     bne.b    mt_trenoc
  423.     clr.b    29(a6)
  424. mt_trenoc
  425.     move.l    4(a6),(a5)        ; init start
  426.     move.w    8(a6),4(a5)        ; init length
  427.     move.w    16(a6),6(a5)        ; init period
  428.     
  429.     move.w    20(a6),d0
  430.     or.w    d0,mt_dmacontemp-mt_pm(a2)
  431.     bra.w    mt_checkmoreefx
  432.  
  433. mt_setdma
  434.     ifeq mt_level6
  435.     bsr.w    mt_dmawait
  436.     move.w    mt_dmacontemp(pc),d0
  437.     or.w    #$8000,d0
  438.     move.w    d0,$dff096
  439.     bsr.w    mt_dmawait
  440.     lea    $dff0a0,a5
  441.     lea    mt_chan1temp(pc),a6
  442.     move.l    10(a6),(a5)
  443.     move.w    14(a6),4(a5)
  444.     move.l    58(a6),$10(a5)
  445.     move.w    62(a6),$14(a5)
  446.     move.l    106(a6),$20(a5)
  447.     move.w    110(a6),$24(a5)
  448.     move.l    154(a6),$30(a5)
  449.     move.w    158(a6),$34(a5)
  450.     elseif
  451.  
  452.     lea    $bfd000,a3
  453.     move.b    #$7f,$d00(a3)
  454.     move.w    #$2000,$dff09c
  455.     move.w    #$a000,$dff09a
  456.     lea    mt_irq1(pc),a4
  457.     move.l    a4,$78.w
  458.     moveq    #0,d0
  459.     move.b    d0,$e00(a3)
  460.     move.b    #$a8,$400(a3)
  461.     move.b    d0,$500(a3)
  462.     move.b    #$11,$e00(a3)
  463.     move.b    #$81,$d00(a3)
  464.     or.w    #$8000,mt_dmacontemp-mt_pm(a2)
  465.     bra.w    mt_dskip
  466.  
  467.  
  468. mt_irq1
  469.     tst.b    $bfdd00
  470.     move.w    mt_dmacontemp(pc),$dff096
  471.     move.w    #$2000,$dff09c
  472.     move.l    mt_irqpointer(pc),$78.w
  473.     rte
  474.  
  475. mt_irqpointer    dc.l    mt_irq2-mt_init
  476.  
  477. mt_irq2
  478.     tst.b    $bfdd00
  479.     movem.l    a5-a6,-(a7)
  480.  
  481.     lea    $dff0a0,a5
  482.     lea    mt_chan1temp(pc),a6
  483.     move.l    10(a6),(a5)
  484.     move.w    14(a6),4(a5)
  485.     move.l    58(a6),$10(a5)
  486.     move.w    62(a6),$14(a5)
  487.     move.l    106(a6),$20(a5)
  488.     move.w    110(a6),$24(a5)
  489.     move.l    154(a6),$30(a5)
  490.     move.w    158(a6),$34(a5)
  491.     clr.b    $bfde00
  492.     move.b    #$7f,$bfdd00
  493.     move.w    #$2000,$dff09c
  494.     movem.l    (a7)+,a5-a6
  495.     rte
  496.     endc
  497.  
  498. mt_dskip
  499.     add.w    #16,mt_patternpos-mt_pm(a2)
  500.     move.b    mt_pattdeltime(pc),d0
  501.     beq.b    mt_dskc
  502.     move.b    d0,mt_pattdeltime2-mt_pm(a2)
  503.     clr.b    mt_pattdeltime-mt_pm(a2)
  504. mt_dskc    tst.b    mt_pattdeltime2-mt_pm(a2)
  505.     beq.b    mt_dska
  506.     subq.b    #1,mt_pattdeltime2-mt_pm(a2)
  507.     beq.b    mt_dska
  508.     sub.w    #16,mt_patternpos-mt_pm(a2)
  509. mt_dska    tst.b    mt_pbreakflag-mt_pm(a2)
  510.     beq.b    mt_nnpysk
  511.     sf    mt_pbreakflag-mt_pm(a2)
  512.     moveq    #0,d0
  513.     move.b    mt_pbreakpos(pc),d0
  514.     clr.b    mt_pbreakpos-mt_pm(a2)
  515.     lsl.w    #4,d0
  516.     move.w    d0,mt_patternpos-mt_pm(a2)
  517. mt_nnpysk
  518.     cmp.w    #1024,mt_patternpos-mt_pm(a2)
  519.     blo.b    mt_nonewposyet
  520. mt_nextposition    
  521.     moveq    #0,d0
  522.     move.b    mt_pbreakpos(pc),d0
  523.     lsl.w    #4,d0
  524.     move.w    d0,mt_patternpos-mt_pm(a2)
  525.     clr.b    mt_pbreakpos-mt_pm(a2)
  526.     clr.b    mt_posjumpflag-mt_pm(a2)
  527.     addq.w    #4,mt_songpos-mt_pm(a2)
  528.     and.w    #511,mt_songpos-mt_pm(a2)
  529.     move.w    mt_songpos(pc),d1
  530.     move.l    mt_dataptr(pc),a0
  531.     cmp.w    248(a0),d1
  532.     blo.b    mt_nonewposyet
  533.     clr.w    mt_songpos-mt_pm(a2)
  534. mt_nonewposyet    
  535.     tst.b    mt_posjumpflag-mt_pm(a2)
  536.     bne.b    mt_nextposition
  537.     rts
  538.  
  539. mt_checkefx
  540.     bsr.w    mt_updatefunk
  541.     move.w    2(a6),d0
  542.     and.w    #$0fff,d0
  543.     beq.b    mt_pernop
  544.     moveq    #0,d0
  545.     move.b    2(a6),d0
  546.     and.b    d5,d0
  547.     move.w    d0,d2
  548.     lsl.b    #2,d2    
  549.     move.l    mt_jumptab1(pc,d2.w),a4
  550.     jmp    (a4)
  551.  
  552. mt_jumptab1
  553.     dc.l    mt_arpeggio
  554.     dc.l    mt_portaup
  555.     dc.l    mt_portadown
  556.     dc.l    mt_toneportamento
  557.     dc.l    mt_vibrato
  558.     dc.l    mt_toneplusvolslide
  559.     dc.l    mt_vibratoplusvolslide
  560.     dc.l    mt_setback
  561.     dc.l    mt_setback
  562.     dc.l    mt_setback
  563.     dc.l    mt_setback
  564.     dc.l    mt_setback
  565.     dc.l    mt_setback
  566.     dc.l    mt_setback
  567.     dc.l    mt_e_commands
  568.     dc.l    mt_setback
  569.  
  570. mt_setback    
  571.     move.w    16(a6),6(a5)
  572.     subq.b    #7,d0
  573.     beq.w    mt_tremolo
  574.     subq.b    #3,d0
  575.     beq.w    mt_volumeslide
  576. mt_return2
  577.     rts
  578.  
  579. mt_pernop
  580.     move.w    16(a6),6(a5)
  581.     rts
  582.  
  583. mt_arpeggio
  584.     moveq    #0,d0
  585.     move.b    mt_counter(pc),d0
  586.     moveq    #3,d2
  587.     divs    d2,d0
  588.     swap    d0
  589.     tst.w    d0
  590.     beq.b    mt_arpeggio2
  591.     subq.w    #2,d0
  592.     beq.b    mt_arpeggio1
  593.     moveq    #0,d0
  594.     move.b    3(a6),d0
  595.     lsr.b    #4,d0
  596.     bra.b    mt_arpeggio3
  597.  
  598. mt_arpeggio1
  599.     moveq    #0,d0
  600.     move.b    3(a6),d0
  601.     and.b    d5,d0
  602.     bra.b    mt_arpeggio3
  603.  
  604. mt_arpeggio2
  605.     move.w    16(a6),d2
  606.     bra.b    mt_arpeggio4
  607.  
  608. mt_arpeggio3
  609.     add.w    d0,d0
  610.     move.l    44(a6),a0
  611.     moveq    #36,d7
  612. mt_arploop
  613.     move.w    (a0,d0.w),d2
  614.     cmp.w    (a0),d1
  615.     bhs.b    mt_arpeggio4
  616.     addq.l    #2,a0
  617.     dbf    d7,mt_arploop
  618.     rts
  619.  
  620. mt_arpeggio4
  621.     move.w    d2,6(a5)
  622.     rts
  623.  
  624. mt_fineportaup
  625.     tst.b    mt_counter-mt_pm(a2)
  626.     bne.b    mt_return2
  627.     move.b    d1,mt_lowmask-mt_pm(a2)
  628. mt_portaup
  629.     moveq    #0,d0
  630.     move.b    3(a6),d0
  631.     and.b    mt_lowmask(pc),d0
  632.     move.b    #$ff,mt_lowmask-mt_pm(a2)
  633.     sub.w    d0,16(a6)
  634.     move.w    16(a6),d0
  635.     and.w    #$0fff,d0
  636.     cmp.w    #113,d0
  637.     bhi.b    mt_portauskip
  638.     and.w    #$f000,16(a6)
  639.     or.w    #113,16(a6)
  640. mt_portauskip
  641.     move.w    16(a6),d0
  642.     and.w    #$0fff,d0
  643.     move.w    d0,6(a5)
  644.     rts    
  645.  
  646. mt_fineportadown
  647.     tst.b    mt_counter-mt_pm(a2)
  648.     bne.w    mt_return2
  649.     move.b    d5,mt_lowmask-mt_pm(a2)
  650. mt_portadown
  651.     moveq    #0,d0
  652.     move.b    3(a6),d0
  653.     and.b    mt_lowmask(pc),d0
  654.     move.b    #$ff,mt_lowmask-mt_pm(a2)
  655.     add.w    d0,16(a6)
  656.     move.w    16(a6),d0
  657.     and.w    #$0fff,d0
  658.     cmp.w    #856,d0
  659.     blo.b    mt_portadskip
  660.     and.w    #$f000,16(a6)
  661.     or.w    #856,16(a6)
  662. mt_portadskip
  663.     move.w    16(a6),d0
  664.     and.w    #$0fff,d0
  665.     move.w    d0,6(a5)
  666.     rts
  667.  
  668. mt_settoneporta
  669.     move.w    (a6),d2
  670.     and.w    #$0fff,d2
  671.     move.l    44(a6),a4
  672.     moveq    #0,d0
  673. mt_stploop
  674.     cmp.w    (a4,d0.w),d2
  675.     bhs.b    mt_stpfound
  676.     addq.w    #2,d0
  677.     cmp.w    #37*2,d0
  678.     blo.b    mt_stploop
  679.     moveq    #35*2,d0
  680. mt_stpfound
  681.     move.b    18(a6),d2
  682.     and.b    #8,d2
  683.     beq.b    mt_stpgoss
  684.     tst.w    d0
  685.     beq.b    mt_stpgoss
  686.     subq.w    #2,d0
  687. mt_stpgoss
  688.     move.w    (a4,d0.w),d2
  689.     move.w    d2,24(a6)
  690.     move.w    16(a6),d0
  691.     clr.b    22(a6)
  692.     cmp.w    d0,d2
  693.     beq.b    mt_cleartoneporta
  694.     bge.w    mt_return2
  695.     move.b    #1,22(a6)
  696.     rts
  697.  
  698. mt_cleartoneporta
  699.     clr.w    24(a6)
  700.     rts
  701.  
  702. mt_toneportamento
  703.     move.b    3(a6),d0
  704.     beq.b    mt_toneportnochange
  705.     move.b    d0,23(a6)
  706.     clr.b    3(a6)
  707. mt_toneportnochange
  708.     tst.w    24(a6)
  709.     beq.w    mt_return2
  710.     moveq    #0,d0
  711.     move.b    23(a6),d0
  712.     tst.b    22(a6)
  713.     bne.b    mt_toneportaup
  714. mt_toneportadown
  715.     add.w    d0,16(a6)
  716.     move.w    24(a6),d0
  717.     cmp.w    16(a6),d0
  718.     bgt.b    mt_toneportasetper
  719.     move.w    24(a6),16(a6)
  720.     clr.w    24(a6)
  721.     bra.b    mt_toneportasetper
  722.  
  723. mt_toneportaup
  724.     sub.w    d0,16(a6)
  725.     move.w    24(a6),d0
  726.     cmp.w    16(a6),d0
  727.     blt.b    mt_toneportasetper
  728.     move.w    24(a6),16(a6)
  729.     clr.w    24(a6)
  730.  
  731. mt_toneportasetper
  732.     move.w    16(a6),d2
  733.     move.b    31(a6),d0
  734.     and.b    d5,d0
  735.     beq.b    mt_glissskip
  736.  
  737.     move.l    44(a6),a0
  738.     moveq    #35,d7
  739. mt_glissloop
  740.     cmp.w    (a0)+,d2
  741.     bge.b    mt_glissfound
  742.     dbf    d7,mt_glissloop
  743.     subq.l    #2,a0
  744. mt_glissfound
  745.     move.w    -2(a0),d2
  746. mt_glissskip
  747.     move.w    d2,6(a5)         ; set period
  748.     rts
  749.  
  750. mt_vibrato
  751.     move.b    3(a6),d0
  752.     beq.b    mt_vibrato2
  753.     move.b    26(a6),d2
  754.     and.b    d5,d0
  755.     beq.b    mt_vibskip
  756.     and.b    d6,d2
  757.     or.b    d0,d2
  758. mt_vibskip
  759.     move.b    3(a6),d0
  760.     and.b    d6,d0
  761.     beq.b    mt_vibskip2
  762.     and.b    d5,d2
  763.     or.b    d0,d2
  764. mt_vibskip2
  765.     move.b    d2,26(a6)
  766. mt_vibrato2
  767.     move.b    27(a6),d0
  768.     lea    mt_vibratotable(pc),a4
  769.     lsr.w    #2,d0
  770.     and.w    #$001f,d0
  771.     moveq    #0,d2
  772.     move.b    30(a6),d2
  773.     and.b    #$03,d2
  774.     beq.b    mt_vib_sine
  775.     lsl.b    #3,d0
  776.     cmp.b    #1,d2
  777.     beq.b    mt_vib_rampdown
  778.     moveq    #-1,d2
  779.     bra.b    mt_vib_set
  780. mt_vib_rampdown
  781.     tst.b    27(a6)
  782.     bpl.b    mt_vib_rampdown2
  783.     moveq    #-1,d2
  784.     sub.b    d0,d2
  785.     bra.b    mt_vib_set
  786. mt_vib_rampdown2
  787.     move.b    d0,d2
  788.     bra.b    mt_vib_set
  789. mt_vib_sine
  790.     move.b    (a4,d0.w),d2
  791. mt_vib_set
  792.     move.b    26(a6),d0
  793.     and.w    d5,d0
  794.     mulu    d0,d2
  795.     lsr.w    #7,d2
  796.     move.w    16(a6),d0
  797.     tst.b    27(a6)
  798.     bmi.b    mt_vibratoneg
  799.     add.w    d2,d0
  800.     bra.b    mt_vibrato3
  801. mt_vibratoneg
  802.     sub.w    d2,d0
  803. mt_vibrato3
  804.     move.w    d0,6(a5)
  805.     move.b    26(a6),d0
  806.     lsr.w    #2,d0
  807.     and.w    #$003c,d0
  808.     add.b    d0,27(a6)
  809.     rts
  810.  
  811. mt_toneplusvolslide
  812.     bsr.w    mt_toneportnochange
  813.     bra.w    mt_volumeslide
  814.  
  815. mt_vibratoplusvolslide
  816.     bsr.b    mt_vibrato2
  817.     bra.w    mt_volumeslide
  818.  
  819. mt_tremolo
  820.     move.b    3(a6),d0
  821.     beq.b    mt_tremolo2
  822.     move.b    28(a6),d2
  823.     and.b    d5,d0
  824.     beq.b    mt_treskip
  825.     and.b    d6,d2
  826.     or.b    d0,d2
  827. mt_treskip
  828.     move.b    3(a6),d0
  829.     and.b    d6,d0
  830.     beq.b    mt_treskip2
  831.     and.b    d5,d2
  832.     or.b    d0,d2
  833. mt_treskip2
  834.     move.b    d2,28(a6)
  835. mt_tremolo2
  836.     move.b    29(a6),d0
  837.     lea    mt_vibratotable(pc),a4
  838.     lsr.w    #2,d0
  839.     moveq    #$1f,d2
  840.     and.w    d2,d0
  841.     move.b    30(a6),d2
  842.     and.w    d6,d2
  843.     lsr.b    #4,d2
  844.     and.b    #$03,d2
  845.     beq.b    mt_tre_sine
  846.     lsl.b    #3,d0
  847.     cmp.b    #1,d2
  848.     beq.b    mt_tre_rampdown
  849.     moveq    #-1,d2
  850.     bra.b    mt_tre_set
  851. mt_tre_rampdown
  852.     tst.b    27(a6)
  853.     bpl.b    mt_tre_rampdown2
  854.     moveq    #-1,d2
  855.     sub.b    d0,d2
  856.     bra.b    mt_tre_set
  857. mt_tre_rampdown2
  858.     move.b    d0,d2
  859.     bra.b    mt_tre_set
  860. mt_tre_sine
  861.     move.b    (a4,d0.w),d2
  862. mt_tre_set
  863.     move.b    28(a6),d0
  864.     and.w    d5,d0
  865.     mulu    d0,d2
  866.     lsr.w    #6,d2
  867.     moveq    #0,d0
  868.     move.b    19(a6),d0
  869.     tst.b    29(a6)
  870.     bmi.b    mt_tremoloneg
  871.     add.w    d2,d0
  872.     bra.b    mt_tremolo3
  873. mt_tremoloneg
  874.     sub.w    d2,d0
  875. mt_tremolo3
  876.     bpl.b    mt_tremoloskip
  877.     moveq    #0,d0
  878. mt_tremoloskip
  879.     cmp.b    mt_maxvol(pc),d0
  880.     bls.b    mt_tremolook
  881.     move.b    mt_maxvol(pc),d0
  882. mt_tremolook
  883.     move.b    d0,9(a5)
  884.     move.b    28(a6),d0
  885.     lsr.w    #2,d0
  886.     and.w    #$003c,d0
  887.     add.b    d0,29(a6)
  888.     rts
  889.  
  890. mt_sampleoffset
  891.     moveq    #0,d0
  892.     move.b    3(a6),d0
  893.     beq.b    mt_sononew
  894.     move.b    d0,32(a6)
  895. mt_sononew
  896.     move.b    32(a6),d0
  897.     lsl.w    #7,d0
  898.     cmp.w    8(a6),d0
  899.     bge.b    mt_sofskip
  900.     sub.w    d0,8(a6)
  901.     add.w    d0,d0
  902.     add.l    d0,4(a6)
  903.     rts
  904. mt_sofskip
  905.     move.w    #1,8(a6)
  906.     rts
  907.  
  908. mt_volumeslide
  909.     move.b    3(a6),d0
  910.     lsr.b    #4,d0
  911.     beq.b    mt_volslidedown
  912. mt_volslideup
  913.     add.b    d0,19(a6)
  914.     move.b    mt_maxvol(pc),d2
  915.     cmp.b    19(a6),d2
  916.     bge.b    mt_vsuskip
  917.     move.b    d2,19(a6)
  918. mt_vsuskip
  919.     move.b    19(a6),9(a5)
  920.     rts
  921.  
  922. mt_volslidedown
  923.     move.b    3(a6),d0
  924.     and.b    d5,d0
  925. mt_volslidedown2
  926.     sub.b    d0,19(a6)
  927.     bpl.b    mt_vsdskip
  928.     clr.b    19(a6)
  929. mt_vsdskip
  930.     move.b    19(a6),9(a5)
  931.     rts
  932.  
  933. mt_positionjump
  934.     moveq    #0,d0
  935.     move.b    3(a6),d0
  936.     subq.b    #1,d0
  937.     lsl.w    #2,d0
  938.     move.w    d0,mt_songpos-mt_pm(a2)
  939. mt_pj2    clr.b    mt_pbreakpos-mt_pm(a2)
  940.     st     mt_posjumpflag-mt_pm(a2)
  941.     rts
  942.  
  943. mt_volumechange
  944.     move.b    3(a6),d0
  945.     cmp.b    mt_maxvol(pc),d0
  946.     ble.b    mt_volumeok
  947.     move.b    mt_maxvol(pc),d0
  948. mt_volumeok
  949.     move.b    d0,19(a6)
  950.     move.b    d0,9(a5)
  951.     rts
  952.  
  953. mt_patternbreak
  954.     move.b    3(a6),d0
  955.     move.b    d0,d2
  956.     lsr.b    #4,d0
  957.     move.b    d0,d1
  958.     add.b    d0,d0        ;*2
  959.     lsl.b    #3,d1        ;*8
  960.     add.b    d1,d0        ;+ -> *10
  961.     and.b    d5,d2
  962.     add.b    d2,d0
  963.     cmp.b    #63,d0
  964.     bhi.b    mt_pj2
  965.     move.b    d0,mt_pbreakpos-mt_pm(a2)
  966.     st    mt_posjumpflag-mt_pm(a2)
  967.     rts
  968.  
  969. mt_setspeed
  970.     move.b    3(a6),d0
  971.     beq.w    mt_return2
  972.     clr.b    mt_counter-mt_pm(a2)
  973.     move.b    d0,mt_speed-mt_pm(a2)
  974.     rts
  975.  
  976. mt_checkmoreefx
  977.     bsr.w    mt_updatefunk
  978.     moveq    #0,d0
  979.     move.b    2(a6),d0
  980.     and.b    d5,d0
  981.     lsl.b    #2,d0
  982.     move.l    mt_jumptab4(pc,d0.w),a4
  983.     jmp    (a4)
  984.  
  985. mt_jumptab4    
  986.     dc.l    mt_pernop
  987.     dc.l    mt_pernop
  988.     dc.l    mt_pernop
  989.     dc.l    mt_pernop
  990.     dc.l    mt_pernop
  991.     dc.l    mt_pernop
  992.     dc.l    mt_pernop
  993.     dc.l    mt_pernop
  994.     dc.l    mt_pernop
  995.     dc.l    mt_sampleoffset
  996.     dc.l    mt_pernop
  997.     dc.l    mt_positionjump
  998.     dc.l    mt_volumechange
  999.     dc.l    mt_patternbreak
  1000.     dc.l    mt_e_commands
  1001.     dc.l    mt_setspeed
  1002.     dc.l    mt_pernop    ; ???
  1003.  
  1004. mt_e_commands
  1005.     moveq    #0,d0
  1006.     move.b    3(a6),d0
  1007.     lsr.b    #4,d0
  1008.     lsl.b    #2,d0
  1009.     move.l    mt_jumptab2(pc,d0.w),a4
  1010.     jmp    (a4)
  1011.  
  1012. mt_jumptab2    
  1013.     dc.l    mt_filteronoff
  1014.     dc.l    mt_fineportaup
  1015.     dc.l    mt_fineportadown
  1016.     dc.l    mt_setglisscontrol
  1017.     dc.l    mt_setvibratocontrol
  1018.     dc.l    mt_setfinetune
  1019.     dc.l    mt_jumploop
  1020.     dc.l    mt_settremolocontrol
  1021.     dc.l    mt_return2
  1022.     dc.l    mt_retrignote
  1023.     dc.l    mt_volumefineup
  1024.     dc.l    mt_volumefinedown
  1025.     dc.l    mt_notecut
  1026.     dc.l    mt_notedelay
  1027.     dc.l    mt_patterndelay
  1028.     dc.l    mt_funkit
  1029.  
  1030. mt_filteronoff
  1031.     move.b    3(a6),d0
  1032.     and.b    #1,d0
  1033.     add.w    d0,d0
  1034.     and.b    #$fd,$bfe001
  1035.     or.b    d0,$bfe001
  1036.     rts    
  1037.  
  1038. mt_setglisscontrol
  1039.     move.b    3(a6),d0
  1040.     and.b    d5,d0
  1041.     and.b    d6,31(a6)
  1042.     or.b    d0,31(a6)
  1043.     rts
  1044.  
  1045. mt_setvibratocontrol
  1046.     move.b    3(a6),d0
  1047.     and.b    d5,d0
  1048.     and.b    d6,30(a6)
  1049.     or.b    d0,30(a6)
  1050.     rts
  1051.  
  1052. mt_setfinetune
  1053.     moveq    #0,d0
  1054.     move.b    3(a6),d0
  1055.     and.b    d5,d0
  1056.     move.b    d0,18(a6)
  1057.     add.w    d0,d0
  1058.     move.w    (a2,d0.w),d0
  1059.     lea    mt_periodtable(pc),a4
  1060.     add.l    d0,a4
  1061.     move.l    a4,44(a6)
  1062.     rts
  1063.  
  1064. mt_jumploop
  1065.     move.b    mt_counter(pc),d1
  1066.     bne.w    mt_return2
  1067.     move.b    3(a6),d0
  1068.     and.b    d5,d0
  1069.     beq.b    mt_setloop
  1070.     tst.b    34(a6)
  1071.     beq.b    mt_jumpcnt
  1072.     subq.b    #1,34(a6)
  1073.     beq.w    mt_return2
  1074. mt_jmploop    
  1075.     move.b    33(a6),mt_pbreakpos-mt_pm(a2)
  1076.     st    mt_pbreakflag-mt_pm(a2)
  1077.     rts
  1078.  
  1079. mt_jumpcnt
  1080.     move.b    d0,34(a6)
  1081.     bra.b    mt_jmploop
  1082.  
  1083. mt_setloop
  1084.     move.w    mt_patternpos(pc),d0
  1085.     lsr.w    #4,d0
  1086.     move.b    d0,33(a6)
  1087.     rts
  1088.  
  1089. mt_settremolocontrol
  1090.     move.b    3(a6),d0
  1091.     and.b    d5,d0
  1092.     lsl.b    #4,d0
  1093.     and.b    d5,30(a6)
  1094.     or.b    d0,30(a6)
  1095.     rts
  1096.  
  1097. mt_retrignote
  1098.     move.b    3(a6),d0
  1099.     and.b    d5,d0
  1100.     beq.b    mt_rtnend
  1101.     moveq    #0,d2
  1102.     move.b    mt_counter(pc),d2
  1103.     bne.b    mt_rtnskp
  1104.     move.w    (a6),d2
  1105.     and.w    #$0fff,d2
  1106.     bne.b    mt_rtnend
  1107.     moveq    #0,d2
  1108.     move.b    mt_counter(pc),d2
  1109. mt_rtnskp
  1110.     divu    d0,d2
  1111.     swap    d2
  1112.     tst.w    d2
  1113.     bne.b    mt_rtnend
  1114. mt_doretrig
  1115.     move.w    20(a6),$dff096        ; channel dma off
  1116.     move.l    4(a6),(a5)        ; set sampledata pointer
  1117.     move.w    8(a6),4(a5)        ; set length
  1118.     bsr.w    mt_dmawait
  1119.     move.w    20(a6),d0
  1120.     or.w    #$8000,d0
  1121.     move.w    d0,$dff096
  1122.     bsr.w    mt_dmawait
  1123.     move.l    10(a6),(a5)
  1124.     move.l    14(a6),4(a5)
  1125. mt_rtnend
  1126.     rts
  1127.  
  1128. mt_volumefineup
  1129.     move.b    mt_counter(pc),d1
  1130.     bne.w    mt_return2
  1131.     move.b    3(a6),d0
  1132.     and.b    d5,d0
  1133.     bra.w    mt_volslideup
  1134.  
  1135. mt_volumefinedown
  1136.     move.b    mt_counter(pc),d1
  1137.     bne.w    mt_return2
  1138.     move.b    3(a6),d0
  1139.     and.b    d5,d0
  1140.     bra.w    mt_volslidedown2
  1141.  
  1142. mt_notecut
  1143.     cmp.b    mt_counter(pc),d0
  1144.     bne.w    mt_return2
  1145.     clr.b    19(a6)
  1146.     clr.w    8(a5)
  1147.     rts
  1148.  
  1149. mt_notedelay
  1150.     move.b    3(a6),d0
  1151.     and.b    d5,d0
  1152.     cmp.b    mt_counter(pc),d0
  1153.     bne.w    mt_return2
  1154.     move.w    (a6),d0
  1155.     beq.w    mt_return2
  1156.     bra.b    mt_doretrig
  1157.  
  1158. mt_patterndelay
  1159.     move.b    mt_counter(pc),d1
  1160.     bne.w    mt_return2
  1161.     move.b    mt_pattdeltime2(pc),d1
  1162.     bne.w    mt_return2
  1163.     move.b    3(a6),d0
  1164.     and.b    d5,d0
  1165.     addq.b    #1,d0
  1166.     move.b    d0,mt_pattdeltime-mt_pm(a2)
  1167.     rts
  1168.  
  1169. mt_funkit
  1170.     move.b    mt_counter(pc),d1
  1171.     bne.w    mt_return2
  1172.     move.b    3(a6),d0
  1173.     and.b    d5,d0
  1174.     lsl.b    #4,d0
  1175.     and.b    d5,31(a6)
  1176.     or.b    d0,31(a6)
  1177.     tst.b    d0
  1178.     beq.w    mt_return2
  1179. mt_updatefunk
  1180.     moveq    #0,d0
  1181.     move.b    31(a6),d0
  1182.     lsr.b    #4,d0
  1183.     beq.b    mt_funkend
  1184.     lea    mt_funktable(pc),a4
  1185.     move.b    (a4,d0.w),d0
  1186.     add.b    d0,35(a6)
  1187.     btst    #7,35(a6)
  1188.     beq.b    mt_funkend
  1189.     clr.b    35(a6)
  1190.  
  1191.     move.l    10(a6),d0
  1192.     moveq    #0,d2
  1193.     move.w    14(a6),d2
  1194.     add.w    d2,d2
  1195.     add.l    d2,d0
  1196.     move.l    36(a6),a4
  1197.     addq.l    #1,a4
  1198.     cmp.l    d0,a4
  1199.     blo.b    mt_funkok
  1200.     move.l    10(a6),a4
  1201. mt_funkok
  1202.     move.l    a4,36(a6)
  1203.     moveq    #-1,d0
  1204.     sub.b    (a4),d0
  1205.     move.b    d0,(a4)
  1206. mt_funkend
  1207.     rts
  1208.  
  1209. mt_dmawait
  1210.     ifgt mt_dmawaiter
  1211.     moveq    #mt_dmawaiter-1,d4
  1212. mt_waitdma2
  1213.     move.b    $dff006,d3
  1214. mt_waitdma3
  1215.     cmp.b    $dff006,d3
  1216.     beq.b    mt_waitdma3
  1217.     dbf    d4,mt_waitdma2        ;wait some rasters
  1218.     endc
  1219.     rts
  1220.  
  1221. mt_funktable     dc.b     0,5,6,7,8,10,11,13,16,19,22,26,32,43,64,128
  1222. mt_vibratotable    dc.b       000,024,049,074,097,120,141,161
  1223.         dc.b     180,197,212,224,235,244,250,253
  1224.         dc.b     255,253,250,244,235,224,212,197
  1225.         dc.b     180,161,141,120,097,074,049,024
  1226. mt_periodtable    dc.w    856,808,762,720,678,640,604,570,538,508,480,453
  1227.         dc.w    428,404,381,360,339,320,302,285,269,254,240,226
  1228.         dc.w    214,202,190,180,170,160,151,143,135,127,120,113    ;0
  1229.         dc.w    850,802,757,715,674,637,601,567,535,505,477,450
  1230.         dc.w    425,401,379,357,337,318,300,284,268,253,239,225
  1231.         dc.w    213,201,189,179,169,159,150,142,134,126,119,113    ;1
  1232.         dc.w    844,796,752,709,670,632,597,563,532,502,474,447
  1233.         dc.w    422,398,376,355,335,316,298,282,266,251,237,224
  1234.         dc.w    211,199,188,177,167,158,149,141,133,125,118,112    ;2
  1235.         dc.w    838,791,746,704,665,628,592,559,528,498,470,444
  1236.         dc.w    419,395,373,352,332,314,296,280,264,249,235,222
  1237.         dc.w    209,198,187,176,166,157,148,140,132,125,118,111    ;3
  1238.         dc.w    832,785,741,699,660,623,588,555,524,495,467,441
  1239.         dc.w    416,392,370,350,330,312,294,278,262,247,233,220
  1240.         dc.w    208,196,185,175,165,156,147,139,131,124,117,110    ;4
  1241.         dc.w    826,779,736,694,655,619,584,551,520,491,463,437
  1242.         dc.w    413,390,368,347,328,309,292,276,260,245,232,219
  1243.         dc.w    206,195,184,174,164,155,146,138,130,123,116,109    ;5
  1244.         dc.w    820,774,730,689,651,614,580,547,516,487,460,434
  1245.         dc.w    410,387,365,345,325,307,290,274,258,244,230,217
  1246.         dc.w    205,193,183,172,163,154,145,137,129,122,115,109    ;6
  1247.         dc.w    814,768,725,684,646,610,575,543,513,484,457,431
  1248.         dc.w    407,384,363,342,323,305,288,272,256,242,228,216
  1249.         dc.w    204,192,181,171,161,152,144,136,128,121,114,108    ;7
  1250.         dc.w    907,856,808,762,720,678,640,604,570,538,508,480
  1251.         dc.w    453,428,404,381,360,339,320,302,285,269,254,240
  1252.         dc.w    226,214,202,190,180,170,160,151,143,135,127,120    ;-8
  1253.         dc.w    900,850,802,757,715,675,636,601,567,535,505,477
  1254.         dc.w    450,425,401,379,357,337,318,300,284,268,253,238
  1255.         dc.w    225,212,200,189,179,169,159,150,142,134,126,119 ;-7
  1256.         dc.w    894,844,796,752,709,670,632,597,563,532,502,474
  1257.         dc.w    447,422,398,376,355,335,316,298,282,266,251,237
  1258.         dc.w    223,211,199,188,177,167,158,149,141,133,125,118    ;-6
  1259.         dc.w    887,838,791,746,704,665,628,592,559,528,498,470
  1260.         dc.w    444,419,395,373,352,332,314,296,280,264,249,235
  1261.         dc.w    222,209,198,187,176,166,157,148,140,132,125,118    ;-5
  1262.         dc.w    881,832,785,741,699,660,623,588,555,524,494,467
  1263.         dc.w    441,416,392,370,350,330,312,294,278,262,247,233
  1264.         dc.w    220,208,196,185,175,165,156,147,139,131,123,117    ;-4
  1265.         dc.w    875,826,779,736,694,655,619,584,551,520,491,463
  1266.         dc.w    437,413,390,368,347,328,309,292,276,260,245,232
  1267.         dc.w    219,206,195,184,174,164,155,146,138,130,123,116    ;-3
  1268.         dc.w    868,820,774,730,689,651,614,580,547,516,487,460
  1269.         dc.w    434,410,387,365,345,325,307,290,274,258,244,230
  1270.         dc.w    217,205,193,183,172,163,154,145,137,129,122,115    ;-2
  1271.         dc.w    862,814,768,725,684,646,610,575,543,513,484,457
  1272.         dc.w    431,407,384,363,342,323,305,288,272,256,242,228
  1273.         dc.w    216,203,192,181,171,161,152,144,136,128,121,114    ;-1
  1274. mt_chan1temp    dc.l    0,0,0,0,0,$00010000,0,0,0,0,0,0
  1275. mt_chan2temp    dc.l    0,0,0,0,0,$00020000,0,0,0,0,0,0
  1276. mt_chan3temp    dc.l    0,0,0,0,0,$00040000,0,0,0,0,0,0
  1277. mt_chan4temp    dc.l    0,0,0,0,0,$00080000,0,0,0,0,0,0
  1278. mt_samplestarts    dcb.l    31
  1279. mt_speed    dc.b     6
  1280. mt_counter    dc.b     0
  1281. mt_songpos    dc.w     0
  1282. mt_pbreakpos    dc.b     0
  1283. mt_posjumpflag    dc.b     0
  1284. mt_pbreakflag    dc.b     0
  1285. mt_lowmask    dc.b     0
  1286. mt_pattdeltime    dc.b     0
  1287. mt_pattdeltime2    dc.b     0
  1288. mt_maxvol    dc.b    64            ;maximum volume
  1289.         dc.b    0            ;unsed
  1290. mt_patternpos    dc.w     0
  1291. mt_dmacontemp    dc.w     0
  1292.     ifne mt_level6
  1293. mt_oldirq    dc.l    0
  1294.     endc
  1295. mt_pm        dcb.w    16
  1296. mt_dataptr    dc.l    0            ;pointer auf sound
  1297.  
  1298.  
  1299.